模版激励视频广告

简介

激励视频广告是一种全新的广告形式,用户可选择观看视频广告以换取有价物,例如虚拟货币、应用内物品和独家内容等等;这类广告一般有一定长度,部分可支持跳过(具体支持视不同ADN而定)。

注意事项

①需要确保在SDK初始化成功后再进行广告请求,否则可能导致广告请求加载失败。 ②聚合维度广告是通过广告位ID发起广告请求的,切记不要使用混淆; ③在广告接入前需要明确各ADN对应聚合广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生。 ④由于各广告平台对于包名校验规则不同,需确保在穿山甲媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生。 ⑤为了保证播放流畅,使用聚合功能的开发者在收到nativeExpressRewardedVideoAdDidLoad:回调来展示广告,在展示前可通过isReady字段来判断当前广告是否可用。 ⑥当广告无法展示时,建议在展示失败nativeExpressRewardedVideoAdDidShowFailed:回调内输出对应的error错误码明确展示失败的原因,可优先检查是否调整了系统时间导致触发此场景。 ⑦如若针对展示失败有重试机制,建议只重试一次即可,避免无限重试引发死循环场景。 ⑧当展示失败/回调监听不执行时,建议检查是否有广告对象被覆盖或者被提前释放的场景导致,每次发次广告请求时,需要重新创建新的广告来调用广告请求方法。 ⑨视频是否静音由接口mutedIfCan控制,默认为NO,对GDT、Mintergral、KS生效。

接入激励视频广告

// 创建广告对象
- (void)p_buildAd {
    CloooudAdSlot *adslot = [[CloooudAdSlot alloc]init];
    adslot.ID = "广告位ID"; // 聚合维度通过广告位ID发起请求

  // 聚合维度相关设置
      adslot.mediation.mutedIfCan = NO; // 是否静音
    adslot.mediation.bidNotify = NO; // 是否开启竞价结果回传
    adslot.mediation.scenarioID = @"123321"; // 场景ID


    CloooudRewardedVideoModel *model = [[CloooudRewardedVideoModel alloc] init];
    model.userId = @"123"; // 用户唯一标识
    model.rewardName = @"rewardName"; // 奖励名称
    model.rewardAmount = 100;  // 奖励数量
    model.extra = @{@"key1" : @"value1"}.CloooudYY_modelToJSONString; // 透传参数
    self.rewardedVideoAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlot:adslot rewardedVideoModel:model];
    self.rewardedVideoAd.delegate = self;
    // optional
    self.rewardedVideoAd.rewardPlayAgainInteractionDelegate = self.rewardedVideoAgainDelegateObj;
}
// 触发广告加载
- (void)p_loadAdData {
    [self.rewardedVideoAd loadAdData];
}
// 收到load成功回调后展示
#pragma mark - CloooudRewardedVideoAdDelegate
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
    [self.rewardedVideoAd showAdFromRootViewController:self];
}

获取展示后广告信息示例

在收到展示回调Visible后访问可获取到正确信息(聚合维度功能)

- (void)logAdInfoAfterShow {
    CloooudMRitInfo *info = [self.rewardedVideoAd.mediation getShowEcpmInfo];
    // 展示后可获取信息如下
    NSLog(@"ecpm:%@", info.ecpm); // 单位:分
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");

    NSLog(@"getAdLoadInfoList:%@", [self.rewardedVideoAd.mediation getAdLoadInfoList]);
}

接口及回调说明

CloooudNativeExpressRewardedVideoAd说明

方法 说明
@property (nonatomic, weak, nullable) id delegate; 激励视频协议,聚合维度使用CloooudMNativeExpressRewardedVideoAdDelegate
@property (nonatomic, weak, nullable) idrewardPlayAgainInteractionDelegate; 为rewardPlayAgainInteractionDelegate增加聚合维度相关回调
@property (nonatomic, copy, readonly) CloooudDictionary *mediaExt; 媒体配置参数
@property (nonatomic, assign, readonly) BOOL materialMetaIsFromPreload; 默认是否 此字段的值在下载成功后才准确 聚合维度不支持此接口
@property (nonatomic, assign, readonly) NSTimeInterval expireTimestamp; 过期时间戳 纯试玩,此字段的值在下载成功后才准确 聚合维度不支持此接口。
- (instancetype)initWithSlotID:(NSString )slotID rewardedVideoModel:(CloooudRewardedVideoModel )model; 创建广告对象参数
- (instancetype)initWithSlot:(CloooudAdSlot )slot rewardedVideoModel:(CloooudRewardedVideoModel )model; 创建广告slot参数
- (NSString *)getAdCreativeToken; 物料ID 聚合维度不支持
- (void)loadAdData; 加载广告
- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; 广告展示回调
- (BOOL)showAdFromRootViewController:(UIViewController )rootViewController ritScene:(CloooudRitSceneType)ritSceneType ritSceneDescribe:(NSString _Nullable)sceneDescirbe;
- (NSTimeInterval)getExpireTimestamp; 过期时间戳 此字段只有下载视频成功或获取权限后才准确 聚合维度不支持此接口
@property (nonatomic, strong, nullable, readonly) CloooudExpressRewardedVideoAdMediation *mediation; 当使用聚合广告位时,存在该属性,可获取聚合维

CloooudExpressRewardedVideoAdMediationProtocol说明

方法 说明
@property (nonatomic, assign, readonly) BOOL isReady; 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示
- (CloooudMRitInfo *)getShowEcpmInfo; 返回显示广告对应的披露信息
- (CloooudMRitInfo *)getCurrentBestEcpmInfo; 填充后可调用,返回当前最佳广告的ecpm;当为server bidding ad时访问需要白名单权限;nil为无权限;
- (NSArray<CloooudMRitInfo > )multiBiddingEcpmInfos; 填充后可调用,但推荐展示后调用,返回竞价广告的ecpm;当为server bidding ad时访问需要白名单权限;
- (NSArray<CloooudMRitInfo > )cacheRitList; 填充后可调用, 返回广告缓存池内所有信息;nil为无权限;
@property (nonatomic, assign, readonly) BOOL isLoading; 广告是否加载中
- (void)addParam:(id)param withKey:(NSString *)key; 添加参数 param 参数值 key 参数key
- (NSArray<CloooudMAdLoadInfo > )getAdLoadInfoList; 一次waterfall中各adn代码位加载广告失败原因,建议调用时机:展示广告时/超时时/全部返回报错时;返回nil表示一次加载无代码位加载失败或其加载无响应

CloooudNativeExpressRewardedVideoAdDelegate说明

方法 说明
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 物料加载成功回调
- (void)nativeExpressRewardedVideoAd:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd didFailWithError:(NSError _Nullable)error; 加载失败回调
- (void)nativeExpressRewardedVideoAdCallback:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd withType:(CloooudNativeExpressRewardedVideoAdType)nativeExpressVideoType; 聚合维度不支持此场景
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 当缓存成功时调用此方法。为了更好的用户体验,建议在这个时候显示视频广告。调用[CloooudNativeExpressRewardedVideoAd] showAdFromRootViewController:]
- (void)nativeExpressRewardedVideoAdViewRenderSuccess:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 渲染成功回调
- (void)nativeExpressRewardedVideoAdViewRenderFail:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd error:(NSError _Nullable)error; 渲染失败回调
- (void)nativeExpressRewardedVideoAdWillVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告即将展示
- (void)nativeExpressRewardedVideoAdDidVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告已经展示
- (void)nativeExpressRewardedVideoAdWillClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告即将关闭
- (void)nativeExpressRewardedVideoAdDidClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告已经关闭
- (void)nativeExpressRewardedVideoAdDidClick:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告点击回调
- (void)nativeExpressRewardedVideoAdDidClickSkip:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd; 广告跳过回调
- (void)nativeExpressRewardedVideoAdDidPlayFinish:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd didFailWithError:(NSError _Nullable)error; 广告播放完成回调
- (void)nativeExpressRewardedVideoAdServerRewardDidSucceed:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify; 奖励验证回调
- (void)nativeExpressRewardedVideoAdServerRewardDidFail:(CloooudNativeExpressRewardedVideoAd )rewardedVideoAd error:(NSError _Nullable)error; 奖励验证失败回调 error:失败原因
- (void)nativeExpressRewardedVideoAdDidCloseOtherController:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd interactionType:(CloooudInteractionType)interactionType; 此方法在另一个控制器关闭时调用。interactionType:在app中打开appstore或打开网页或查看视频广告详情页面 聚合维度不支持此场景。

高级功能

显示奖励内容

使用说明

  1. 若想使用此功能,必须在平台-激励视频代码位创编中配置开启“是否在广告中显示奖励内容”开关。

  2. 开启后,根据系统优选的结果,您设置的奖励物品名称、奖励数量将有可能在广告播放过程中展示。开发者可以通过两种方案配置具体显示的奖励内容。

    1. 在平台的代码位创编页面中里输入奖励名称和数量。
    2. 在请求广告时传入奖励名称和数量。
    • 在实际使用时,会按照优先级 2 > 1 来展示,若奖励名称和数量任一为空,则认为此对值无效。
    • 奖励数量为1~5个数字整数值,奖励内容为1~10个英文字符长度的字符串。
  3. 具体的使用示例与温馨提示

    • 奖励物品名称“金币”,奖励数量“500”,广告挽留弹窗提示用户继续看完视频可领取“500金币”;奖励物品名称“分钟免广告”,奖励数量“60”,挽留弹窗显示继续观看xxs可领取奖励“60分钟免广告”。
    • 建议开发者配置/回传用户可真实获取的奖励内容,避免用户对奖励预期与获取产生出入。
    • 推荐开发者通过接口回传的形式,以便更灵活、动态地下发奖励,在用户粒度个性化优化收益。

接口说明

在构建CloooudNativeExpressRewardedVideoAd时,使用CloooudRewardedVideoModel,传入奖励名称与奖励数量。

CloooudRewardedVideoModel *model = [[CloooudRewardedVideoModel alloc] init];
model.rewardName = @"金币"; // 奖励名称
model.rewardAmount = 300; // 奖励数量
self.rewardedAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlotID:slotID rewardedVideoModel:model];

聚合维度“再看一个”功能介绍

简介

挽留弹窗样式示例

f9846ad9a99a78a14f9adc052c9abcc7.png

完整接入示例代码

/******** 激励广告配置 *********/
- (void)loadAd {
    CloooudAdSlot *slot = [[CloooudAdSlot alloc] init];
    slot.ID = @"广告位ID"; // 聚合维度使用广告位ID发起请求,
    slot.mediation.mutedIfCan = YES; // 静音(聚合维度设置)

    // 奖励发放设置
    CloooudRewardedVideoModel *rewardedVideoModel = [[CloooudRewardedVideoModel alloc] init];   
    rewardedVideoModel.rewardName = @"金币"; // 奖励名称
    rewardedVideoModel.rewardAmount = 1000;  // 奖励数量
    rewardedVideoModel.extra = ({
        // 透传参数
            NSDictionary *extra = @{ 
                @"value": @"10",
            };

        NSData *data = [NSJSONSerialization dataWithJSONObject:extra options:NSJSONWritingSortedKeys error:NULL];
        NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        json;
    });

    CloooudNativeExpressRewardedVideoAd *rewardedVideoAd = [[CloooudNativeExpressRewardedVideoAd alloc] initWithSlot:slot rewardedVideoModel:rewardedVideoModel];
    rewardedVideoAd.delegate = self;

    // 设置竖屏 (聚合维度功能)
    [rewardedVideoAd.mediation addParam:@(0) withKey:@"show_direction"];
    self.rewardedVideoAd = rewardedVideoAd;
    [self.rewardedVideoAd loadAdData];
}

/******** 激励广告回调处理 *********/
#pragma mark - CloooudMNativeExpressRewardedVideoAdDelegate
// 广告加载成功
- (void)nativeExpressRewardedVideoAdDidLoad:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
    // 聚合维度 广告加载成功之后,可以调用展示方法,按照实际需要调整代码位置
    [rewardedVideoAd showAdFromRootViewController:self];
}

// 广告加载失败
- (void)nativeExpressRewardedVideoAd:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {

}

// 广告素材加载完成
- (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
 // 仅接入CSJ广告建议在收到该回调时展示广告
}

// 广告展示失败
- (void)nativeExpressRewardedVideoAdDidShowFailed:(CloooudNativeExpressRewardedVideoAd *_Nonnull)rewardedVideoAd error:(NSError *_Nonnull)error {

}

// 广告已经展示
- (void)nativeExpressRewardedVideoAdDidVisible:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {
    /*
    //  (注意: getShowEcpmInfo 需要在当前广告展示之后调用, 展示之前调用该方法会返回 nil)
    CloooudMRitInfo *info = [rewardedVideoAd.mediation getShowEcpmInfo];
    NSLog(@"ecpm:%@", info.ecpm);
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");
    */
}

// 广告已经关闭
- (void)nativeExpressRewardedVideoAdDidClose:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {

}

// 广告被点击
- (void)nativeExpressRewardedVideoAdDidClick:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {

}

// 广告被点击跳过
- (void)nativeExpressRewardedVideoAdDidClickSkip:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd {

}

// 广告视频播放完成
- (void)nativeExpressRewardedVideoAdDidPlayFinish:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error {

}

// 广告奖励下发
- (void)nativeExpressRewardedVideoAdServerRewardDidSucceed:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify {

}

// 广告奖励下发失败
- (void)nativeExpressRewardedVideoAdServerRewardDidFail:(CloooudNativeExpressRewardedVideoAd *)rewardedVideoAd error:(NSError *_Nullable)error {

}

详细接入可参照demo中的CloooudMDExpressRewardedVideoViewController类。